查看原文
其他

【分享】python处理日值气象数据


数据说明

数据来自 2010年中国地面气候资料日值数据集(V3.0)  中国气象数据网

数据集实体文件名称:
数据文件命名由数据集代码(SURF_CLI_CHN_MUL_DAY)、要素代码(XXX)、项目代码(XXXXX)、年份标识(YYYY)和月份标识(MM)组成。其中,SURF表示地面气象资料,CLI表示地面气候资料,CHN表示中国,MUL表示多要素,DAY表示日值数据。
XXX-XXXXX说明:PRS-10004表示本站气压,TEM-12001表示气温,RHU-13003表示相对湿度,PRE-13011表示降水,EVP-13240表示蒸发,WIN-11002表示风向风速,SSD-14032表示日照,GST-12030-0cm表示0cm地温。
文件命名为:
1. 本站气压:SURF_CLI_CHN_MUL_DAY-PRS-10004-YYYYMM.TXT
2. 气温:SURF_CLI_CHN_MUL_DAY-TEM-12001-YYYYMM.TXT
3. 相对湿度:SURF_CLI_CHN_MUL_DAY-RHU-13003-YYYYMM.TXT
4. 降水:SURF_CLI_CHN_MUL_DAY-PRE-13011-YYYYMM.TXT
5. 蒸发:SURF_CLI_CHN_MUL_DAY-EVP-13240-YYYYMM.TXT
6. 风向风速:SURF_CLI_CHN_MUL_DAY-WIN-11002-YYYYMM.TXT
7. 日照:SURF_CLI_CHN_MUL_DAY-SSD-14032-YYYYMM.TXT
8. 0cm地温:SURF_CLI_CHN_MUL_DAY-GST-12030-0cm-YYYYMM.TXT

本次只选用了12个月份日值地温数据:


数据格式说明和数据内容如下:




根据数据格式说明文档可知,上图中标记的两列分别问日均值地温和日均值地温质量控制码。

处理目的/过程

处理的目的是得到 2010年的年平均地温,因此需要对12个月份txt文件的日均值地温根据台站号进行批量处理得到12个月份的月均值地温,最后得到2010年的年平均地温数据。


代码

运行前将txt文档单独放在一个文件夹中,文件夹中不能有其他格式的文件。

import os
import pandas as pd
os.chdir(r'E:\pytest\2010年日平均低温')
l = os.listdir(r'E:\pytest\2010年日平均低温')
#如下读取可获得Data_GST_20100* 12个单独的变量,后面批量处理并不方便
'''
names = locals()
for i in range(len(l)):
io = l[i]
names['
Data_'+l[i][21:24]+'_'+l[i][-10:-4]] = pd.read_csv(io,sep='\s+',header=None)
#根据第10列的质量控制码 筛选出正确数据
Data_GST_201001=Data_GST_201001[Data_GST_201001[10].isin([0])]
#判断数据是否正确 然后求均值
if Data_GST_201001[10].max() == 0:
group = Data_GST_201001.groupby([0])[7].mean()*0.1 #平均温度求均值并把单位转换为摄氏度
'''

#如下读取可得到data列表 包括12个月份数据的dataframe,后面方便进行批处理
data = []
for i in range(len(l)):
io = l[i]
data.append(pd.read_table(io,sep='\s+',header=None))
'''
质量控制码 含义
0 数据正确
1 数据可疑
2 数据错误
8 数据缺测或无观测任务
9 数据未进行质量控制

11 平均地表气温质量控制码
8 平均地表气温 Number(7) 0.1℃
'''

#根据第10列的质量控制码 筛选出正确数据
for i in range(len(data)):
data[i] = data[i][data[i][10].isin([0])]
#判断数据是否正确 然后求均值
qa=0
for i in range(len(data)):
if data[i][10].max() == 0:
qa = 1
if qa == 1:
#接下来按照台站号批量求每月气温均值 并转换为℃
month_lst = []
for i in range(len(data)):
month_lst.append(data[i].groupby([0])[7].mean()*0.1)
#接下来按照台站号求年平均气温
yearsum_lst = month_lst[0]
for i in range(len(data)):
yearsum_lst += month_lst[i]
yearmean_lst = yearsum_lst/12
#yearmean_lst.to_excel('2010yearmean_lst.xlsx')
print('END!')
#写出excel表格数据
else:
for i in range(len(data)):
if data[i][10].max() == 0:
print('{}月数据合格'.format(i+1))
else:
print('{}月数据不合格'.format(i+1))
#接下来添加站点经纬度数据
#首先提取站点经纬度
location = data[0].iloc[:,0:3].groupby([0]).mean() / 100
location.columns = ['Y','X']
#location.to_excel('location.xlsx')
X = location.loc[:,'X']
Y = location.loc[:,'Y']
#提取站点海拔高度
height = data[0].groupby([0])[3].mean() / 10
#写出数据
final_data = pd.DataFrame({'X':X,'Y':Y,'年均地温':yearmean_lst,'海拔高度':height})
final_data.to_excel('2010yearmean_lst.xlsx')


处理结果




2020-5-13-10:24更新
处理日值降水数据得到年总降水量数据。

import os
import pandas as pd

os.chdir(r'E:\pytest\2010年日降水量')
l = os.listdir(r'E:\pytest\2010年日降水量')

#如下读取可得到data列表 包括12个月份数据的dataframe,后面方便进行批处理
data = []
for i in range(len(l)):
io = l[i]
data.append(pd.read_table(io,sep='\s+',header=None))
#根据第10列的质量控制码 筛选出正确数据
for i in range(len(data)):
data[i] = data[i][ data[i][10].isin([0]) ]
data[i] = data[i][ ~data[i][7].isin([32700])]
#判断数据是否正确 然后求均值
qa = 0
for i in range(len(data)):
if data[i][10].max() == 0 and data[i][7].max() < 32700 :
qa = 1
if qa == 1:
#接下来按照台站号批量求每月降水总量 并转换为mm
month_pre = []
for i in range(len(data)):
month_pre.append( data[i].groupby([0])[7].sum() )
#接下来按照台站号求年总降水量
yearsum_pre = month_pre[0]
for i in range(len(data)):
yearsum_pre += month_pre[i]
print('END!')
#写出excel表格数据
else:
for i in range(len(data)):
if data[i][10].max() == 0:
print('{}月数据合格'.format(i+1))
else:
print('{}月数据不合格'.format(i+1))
#接下来添加站点经纬度数据
#首先提取站点经纬度
location = data[0].iloc[:,0:3].groupby([0]).mean() / 100
location.columns = ['Y', 'X']
#location.to_excel('location.xlsx')
X = location.loc[:, 'X']
Y = location.loc[:, 'Y']
#提取站点海拔高度
height = data[0].groupby([0])[3].mean() / 10
#写出数据
final_data = pd.DataFrame({'X':X,'Y':Y,'年总降水量':yearsum_pre,'海拔高度':height})
final_data.to_excel('2010year_sumPre.xlsx')


本文为CSDN博主「江北20190411」的原创文章

原文链接:https://blog.csdn.net/tk20190411/article/details/105485131?biz_id=102&utm_term=%E6%B1%9F%E5%8C%9720190411&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~sobaiduweb~default-5-105485131&spm=1018.2118.3001.4187



其它相关推荐:

【分享】HWSD全球土壤数据下载处理

【分享】HWSD数据库土壤中文名称

【推荐】Python机器学习案例实践视频课程

【推荐】生态系统服务及InVEST模型应用

【推荐】无人机生态环境监测、图像处理与GIS数据分析综合应用

【分享】Python编程:从入门到实践

【推荐】“Python语言+气象水文”数据处理及精美科研绘图实战

【推荐】WRF/Chem 在大气环境领域实践技术应用

【推荐】基于R语言的结构方程模型分析及应用

【推荐】陆面蒸散模拟的理论与应用



关注此公众号并转发,联系客服即可免费领取以上推荐课程公益专题                               
微信/电话:15532228141
QQ:        1194507342


Ai尚研修技术课堂高度重视版权,对于来自网站、期刊、书籍、微博、微信公众号等媒介的稿件,会在作者栏或者文章开头显著标明出处,以表达对作者和推文引用平台版权的充分尊重和感谢;对于来源于网络作者不明的优质作品,转载时如出现侵权,请后台留言,我们会及时删除。

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存